home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World 2007 January
/
PCWorld_2007-01_cd.bin
/
v cisle
/
autoit
/
autoit-v3.2.0.1-setup.exe
/
Include
/
Array.au3
< prev
next >
Wrap
Text File
|
2006-06-20
|
27KB
|
810 lines
; Include Version:1.63 (19 June 2006)
#include-once
; ------------------------------------------------------------------------------
;
; AutoIt Version: 3.0
; Language: English
; Description: Functions that assist with array management.
;
; Apr 28, 2005 - Fixed _ArrayTrim(): $iTrimDirection test.
; ------------------------------------------------------------------------------
;===============================================================================
;
; Function Name: _ArrayAdd()
; Description: Adds a specified value at the end of an array, returning the
; adjusted array.
; Author(s): Jos van der Zande <jdeb at autoitscript dot com>
;
;===============================================================================
Func _ArrayAdd(ByRef $avArray, $sValue)
If IsArray($avArray) Then
ReDim $avArray[UBound($avArray) + 1]
$avArray[UBound($avArray) - 1] = $sValue
SetError(0)
Return 1
Else
SetError(1)
Return 0
EndIf
EndFunc ;==>_ArrayAdd
;===============================================================================
;
; Function Name: _ArrayBinarySearch()
; Description: Uses the binary search algorithm to search through a
; 1-dimensional array.
; Author(s): Jos van der Zande <jdeb at autoitscript dot com>
;
;===============================================================================
Func _ArrayBinarySearch(ByRef $avArray, $sKey, $i_Base = 0)
Local $iLwrLimit = $i_Base
Local $iUprLimit
Local $iMidElement
If (Not IsArray($avArray)) Then
SetError(1)
Return ""
EndIf
$iUprLimit = UBound($avArray) - 1
$iMidElement = Int( ($iUprLimit + $iLwrLimit) / 2)
; sKey is smaller than the first entry
If $avArray[$iLwrLimit] > $sKey Or $avArray[$iUprLimit] < $sKey Then
SetError(2)
Return ""
EndIf
While $iLwrLimit <= $iMidElement And $sKey <> $avArray[$iMidElement]
If $sKey < $avArray[$iMidElement] Then
$iUprLimit = $iMidElement - 1
Else
$iLwrLimit = $iMidElement + 1
EndIf
$iMidElement = Int( ($iUprLimit + $iLwrLimit) / 2)
WEnd
If $iLwrLimit > $iUprLimit Then
; Entry not found
SetError(3)
Return ""
Else
;Entry found , return the index
SetError(0)
Return $iMidElement
EndIf
EndFunc ;==>_ArrayBinarySearch
;===============================================================================
;
; Function Name: _ArrayCreate()
; Description: Create a small array and quickly assign values.
; Parameter(s): $v_0 - The first element of the array.
; $v_1 - The second element of the array (optional).
; ...
; $v_20 - The twentyfirst element of the array (optional).
; Requirement(s): None.
; Return Value(s): The array with values.
; Author(s): Dale (Klaatu) Thompson
; Note(s): None.
;
;===============================================================================
Func _ArrayCreate($v_0, $v_1 = 0, $v_2 = 0, $v_3 = 0, $v_4 = 0, $v_5 = 0, $v_6 = 0, $v_7 = 0, $v_8 = 0, $v_9 = 0, $v_10 = 0, $v_11 = 0, $v_12 = 0, $v_13 = 0, $v_14 = 0, $v_15 = 0, $v_16 = 0, $v_17 = 0, $v_18 = 0, $v_19 = 0, $v_20 = 0)
Local $i_UBound = @NumParams
Local $av_Array[$i_UBound]
Local $i_Index
For $i_Index = 0 To ($i_UBound - 1)
$av_Array[$i_Index] = Eval("v_" & String($i_Index))
Next
Return $av_Array
; Create fake usage for the variables to suppress Au3Check -w 6
$v_0 = $v_0 = $v_1 = $v_2 = $v_3 = $v_4 = $v_5 = $v_6 = $v_7 = $v_8 = $v_9 = $v_10
$v_11 = $v_11 = $v_12 = $v_13 = $v_14 = $v_15 = $v_16 = $v_17 = $v_18 = $v_19 = $v_20
EndFunc ;==>_ArrayCreate
;===============================================================================
;
; Function Name: _ArrayDelete()
; Description: Deletes the specified element from the given array, returning
; the adjusted array.
; Author(s) Cephas <cephas at clergy dot net>
; Modifications Array is passed via Byref - Jos van der zande
;===============================================================================
Func _ArrayDelete(ByRef $avArray, $iElement)
Local $iCntr = 0, $iUpper = 0
If (Not IsArray($avArray)) Then
SetError(1)
Return ""
EndIf
; We have to define this here so that we're sure that $avArray is an array
; before we get it's size.
$iUpper = UBound($avArray) ; Size of original array
; If the array is only 1 element in size then we can't delete the 1 element.
If $iUpper = 1 Then
SetError(2)
Return ""
EndIf
Local $avNewArray[$iUpper - 1]
If $iElement < 0 Then
$iElement = 0
EndIf
If $iElement > ($iUpper - 1) Then
$iElement = ($iUpper - 1)
EndIf
If $iElement > 0 Then
For $iCntr = 0 To $iElement - 1
$avNewArray[$iCntr] = $avArray[$iCntr]
Next
EndIf
If $iElement < ($iUpper - 1) Then
For $iCntr = ($iElement + 1) To ($iUpper - 1)
$avNewArray[$iCntr - 1] = $avArray[$iCntr]
Next
EndIf
$avArray = $avNewArray
SetError(0)
Return 1
EndFunc ;==>_ArrayDelete
;===============================================================================
;
; Function Name: _ArrayDisplay()
; Description: Displays a 1-dimensional array in a message box.
; Author(s): Brian Keene <brian_keene at yahoo dot com>
;
;===============================================================================
Func _ArrayDisplay(Const ByRef $avArray, $sTitle)
Local $iCounter = 0, $sMsg = ""
If (Not IsArray($avArray)) Then
SetError(1)
Return 0
EndIf
For $iCounter = 0 To UBound($avArray) - 1
$sMsg = $sMsg & "[" & $iCounter & "] = " & StringStripCR($avArray[$iCounter]) & @CR
Next
MsgBox(4096, $sTitle, $sMsg)
SetError(0)
Return 1
EndFunc ;==>_ArrayDisplay
;===============================================================================
;
; Function Name: _ArrayInsert()
; Description: Add a new value at the specified position.
;
; Author(s): Jos van der Zande <jdeb at autoitscript dot com>
;
;===============================================================================
Func _ArrayInsert(ByRef $avArray, $iElement, $sValue = "")
Local $iCntr = 0
If Not IsArray($avArray) Then
SetError(1)
Return 0
EndIf
; Add 1 to the Array
ReDim $avArray[UBound($avArray) + 1]
; Move all entries one up till the specified Element
For $iCntr = UBound($avArray) - 1 To $iElement + 1 Step - 1
$avArray[$iCntr] = $avArray[$iCntr - 1]
Next
; add the value in the specified element
$avArray[$iCntr] = $sValue
Return 1
EndFunc ;==>_ArrayInsert
;===============================================================================
;
; Function Name: _ArrayMax()
; Description: Returns the highest value held in an array.
; Author(s): Cephas <cephas at clergy dot net>
;
; Jos van der Zande
; Modified: Added $iCompNumeric and $i_Base parameters and logic
;===============================================================================
Func _ArrayMax(Const Byref $avArray, $iCompNumeric = 0, $i_Base = 0)
If IsArray($avArray) Then
Return $avArray[_ArrayMaxIndex($avArray, $iCompNumeric, $i_Base) ]
Else
SetError(1)
Return ""
EndIf
EndFunc ;==>_ArrayMax
;===============================================================================
;
; Function Name: _ArrayMaxIndex()
; Description: Returns the index where the highest value occurs in the array.
; Author(s): Cephas <cephas at clergy dot net>
;
; Jos van der Zande
; Modified: Added $iCompNumeric and $i_Base parameters and logic
;===============================================================================
Func _ArrayMaxIndex(Const ByRef $avArray, $iCompNumeric = 0, $i_Base = 0)
Local $iCntr, $iMaxIndex = $i_Base
If Not IsArray($avArray) Then
SetError(1)
Return ""
EndIf
Local $iUpper = UBound($avArray)
For $iCntr = $i_Base To ($iUpper - 1)
If $iCompNumeric = 1 Then
If Number($avArray[$iMaxIndex]) < Number($avArray[$iCntr]) Then
$iMaxIndex = $iCntr
EndIf
Else
If $avArray[$iMaxIndex] < $avArray[$iCntr] Then
$iMaxIndex = $iCntr
EndIf
EndIf
Next
SetError(0)
Return $iMaxIndex
EndFunc ;==>_ArrayMaxIndex
;===============================================================================
;
; Function Name: _ArrayMin()
; Description: Returns the lowest value held in an array.
; Author(s): Cephas <cephas ay clergy dot net>
;
; Jos van der Zande
; Modified: Added $iCompNumeric and $i_Base parameters and logic
;===============================================================================
Func _ArrayMin(Const ByRef $avArray, $iCompNumeric = 0, $i_Base = 0)
If IsArray($avArray) Then
Return $avArray[_ArrayMinIndex($avArray, $iCompNumeric, $i_Base) ]
Else
SetError(1)
Return ""
EndIf
EndFunc ;==>_ArrayMin
;===============================================================================
;
; Function Name: _ArrayMinIndex()
; Description: Returns the index where the lowest value occurs in the array.
; Author(s): Cephas <cephas at clergy dot net>
;
; Jos van der Zande
; Modified: Added $iCompNumeric and $i_Base parameters and logic
;===============================================================================
Func _ArrayMinIndex(Const ByRef $avArray, $iCompNumeric = 0, $i_Base = 0)
Local $iCntr = 0, $iMinIndex = $i_Base
If Not IsArray($avArray) Then
SetError(1)
Return ""
EndIf
Local $iUpper = UBound($avArray)
For $iCntr = $i_Base To ($iUpper - 1)
If $iCompNumeric = 1 Then
If Number($avArray[$iMinIndex]) > Number($avArray[$iCntr]) Then
$iMinIndex = $iCntr
EndIf
Else
If $avArray[$iMinIndex] > $avArray[$iCntr] Then
$iMinIndex = $iCntr
EndIf
EndIf
Next
SetError(0)
Return $iMinIndex
EndFunc ;==>_ArrayMinIndex
;===============================================================================
;
; Function Name: _ArrayPop()
; Description: Returns the last element of an array, deleting that element
; from the array at the same time.
; Author(s): Cephas <cephas at clergy dot net>
; Modified: Use Redim to remove last entry.
;===============================================================================
Func _ArrayPop(ByRef $avArray)
Local $sLastVal
If (Not IsArray($avArray)) Then
SetError(1)
Return ""
EndIf
$sLastVal = $avArray[UBound($avArray) - 1]
; remove the last value
If UBound($avArray) = 1 Then
$avArray = ""
Else
ReDim $avArray[UBound($avArray) - 1]
EndIf
; return last value
Return $sLastVal
EndFunc ;==>_ArrayPop
;=====================================================================================
;
; Function Name: _ArrayPush
; Description: Add new values without increasing array size.Either by inserting
; at the end the new value and deleting the first one or vice versa.
; Parameter(s): $avArray - Array
; $sValue - The new value.It can be an array too.
; $i_Direction - 0 = Leftwise slide (adding at the end) (default)
; 1 = Rightwise slide (adding at the start)
; Requirement(s): None
; Return Value(s): On Success - Returns 1
; On Failure - 0 if $avArray is not an array.
; -1 if $sValue array size is greater than $avArray size.
; In both cases @error is set to 1.
; Author(s): Helias Gerassimou(hgeras)
;
;======================================================================================
Func _ArrayPush(ByRef $avArray, $sValue, $i_Direction = 0)
Local $i, $j
If (Not IsArray($avArray)) Then
SetError(1)
Return 0
EndIf
;
If (Not IsArray($sValue)) Then
If $i_Direction = 1 Then
For $i = (UBound($avArray) - 1) To 1 Step -1
$avArray[$i] = $avArray[$i - 1]
Next
$avArray[0] = $sValue
Else
For $i = 0 To (UBound($avArray) - 2)
$avArray[$i] = $avArray[$i + 1]
Next
$i = (UBound($avArray) - 1)
$avArray[$i] = $sValue
EndIf
;
SetError(0)
Return 1
Else
If UBound($sValue) > UBound($avArray) Then
SetError(1)
Return -1
Else
For $j = 0 to (UBound($sValue) - 1)
If $i_Direction = 1 Then
For $i = (UBound($avArray) - 1) To 1
$avArray[$i] = $avArray[$i - 1]
Next
$avArray[$j] = $sValue[$j]
Else
For $i = 0 To (UBound($avArray) - 2)
$avArray[$i] = $avArray[$i + 1]
Next
$i = (UBound($avArray) - 1)
$avArray[$i] = $sValue[$j]
EndIf
Next
EndIf
EndIf
;
SetError(0)
Return 1
;
EndFunc ;==>_ArrayPush
;===============================================================================
;
; Function Name: _ArrayReverse()
; Description: Takes the given array and reverses the order in which the
; elements appear in the array.
; Author(s): Brian Keene <brian_keene at yahoo dot com>
;
; Modified: Added $i_Base parameter and logic (Jos van der Zande)
; Added $i_UBound parameter and rewrote it for speed. (Tylo)
;===============================================================================
Func _ArrayReverse(ByRef $avArray, $i_Base = 0, $i_UBound = 0)
If Not IsArray($avArray) Then
SetError(1)
Return 0
EndIf
Local $tmp, $last = UBound($avArray) - 1
If $i_UBound < 1 Or $i_UBound > $last Then $i_UBound = $last
For $i = $i_Base To $i_Base + Int(($i_UBound - $i_Base - 1) / 2)
$tmp = $avArray[$i]
$avArray[$i] = $avArray[$i_UBound]
$avArray[$i_UBound] = $tmp
$i_UBound = $i_UBound - 1
Next
Return 1
EndFunc ;==>_ArrayReverse
;===============================================================================
;
; Description: Finds an entry within a one-dimensional array. (Similar to _ArrayBinarySearch() except the array does not need to be sorted.)
; Syntax: _ArraySearch($avArray, $vWhat2Find, $iStart = 0, $iEnd = 0,$iCaseSense=0)
;
; Parameter(s): $avArray = The array to search
; $vWhat2Find = What to search $avArray for
; $iStart (Optional) = Start array index for search, normally set to 0 or 1. If omitted it is set to 0
; $iEnd (Optional) = End array index for search. If omitted or set to 0 it is set to Ubound($AvArray)-
; $iCaseSense (Optional) = If set to 1 then search is case sensitive
; Requirement(s): None
;
; Return Value(s): On Success - Returns the position of an item in an array.
; On Failure - Returns an -1 if $vWhat2Find is not found
; @Error=1 $avArray is not an array
; @Error=2 $iStart is greater than UBound($AvArray)-1
; @Error=3 $iEnd is greater than UBound($AvArray)-1
; @Error=4 $iStart is greater than $iEnd
; @Error=5 $iCaseSense was invalid. (Must be 0 or 1)
; @Error=6 $vWhat2Find was not found in $avArray
;
; Author(s): SolidSnake <MetalGearX91 at Hotmail dot com>
; Note(s): This might be slower than _ArrayBinarySearch() but is useful when the array's order can't be altered.
;===============================================================================
Func _ArraySearch(Const ByRef $avArray, $vWhat2Find, $iStart = 0, $iEnd = 0, $iCaseSense = 0)
Local $iCurrentPos, $iUBound
If Not IsArray($avArray) Then
SetError(1)
Return -1
EndIf
$iUBound = UBound($avArray) - 1
If $iEnd = 0 Then $iEnd = $iUBound
If $iStart > $iUBound Then
SetError(2)
Return -1
EndIf
If $iEnd > $iUBound Then
SetError(3)
Return -1
EndIf
If $iStart > $iEnd Then
SetError(4)
Return -1
EndIf
If Not ($iCaseSense = 0 Or $iCaseSense = 1) Then
SetError(5)
Return -1
EndIf
For $iCurrentPos = $iStart To $iEnd
Select
Case $iCaseSense = 0
If $avArray[$iCurrentPos] = $vWhat2Find Then
SetError(0)
Return $iCurrentPos
EndIf
Case $iCaseSense = 1
If $avArray[$iCurrentPos] == $vWhat2Find Then
SetError(0)
Return $iCurrentPos
EndIf
EndSelect
Next
SetError(6)
Return -1
EndFunc ;==>_ArraySearch
;===============================================================================
;
; Function Name: _ArraySort()
; Description: Sort an 1 or 2 dimensional Array on a specific index
; using the quicksort/insertsort algorithms.
; Parameter(s): $a_Array - Array
; $i_Descending - Sort Descending when 1
; $i_Base - Start sorting at this Array entry.
; $I_Ubound - End sorting at this Array entry.
; Default UBound($a_Array) - 1
; $i_Dim - Elements to sort in second dimension
; $i_SortIndex - The Index to Sort the Array on.
; (for 2-dimensional arrays only)
; Requirement(s): None
; Return Value(s): On Success - 1 and the sorted array is set
; On Failure - 0 and sets @ERROR = 1
; Author(s): Jos van der Zande <jdeb at autoitscript dot com>
; LazyCoder - added $i_SortIndex option
; Tylo - implemented stable QuickSort algo
; Jos - Changed logic to correctly Sort arrays with mixed Values and Strings
;
;===============================================================================
;
Func _ArraySort(ByRef $a_Array, $i_Decending = 0, $i_Base = 0, $i_UBound = 0, $i_Dim = 1, $i_SortIndex = 0)
; Set to ubound when not specified
If Not IsArray($a_Array) Then
SetError(1)
Return 0
EndIf
Local $last = UBound($a_Array) - 1
If $i_UBound < 1 Or $i_UBound > $last Then $i_UBound = $last
If $i_Dim = 1 Then
__ArrayQSort1($a_Array, $i_Base, $i_UBound)
If $i_Decending Then _ArrayReverse($a_Array, $i_Base, $i_UBound)
Else
__ArrayQSort2($a_Array, $i_Base, $i_UBound, $i_Dim, $i_SortIndex, $i_Decending)
EndIf
Return 1
EndFunc;==>_ArraySort
; Private
Func __ArrayQSort1(ByRef $array, ByRef $left, ByRef $right)
Local $i, $j, $t
If $right - $left < 10 Then
; InsertSort - fastest on small segments (= 25% total speedup)
For $i = $left + 1 To $right
$t = $array[$i]
$j = $i
While $j > $left _
And ( (IsNumber($array[$j - 1]) = IsNumber($t) And $array[$j - 1] > $t) _
Or (IsNumber($array[$j - 1]) <> IsNumber($t) And String($array[$j - 1]) > String($t)))
$array[$j] = $array[$j - 1]
$j = $j - 1
Wend
$array[$j] = $t
Next
Return
EndIf
; QuickSort - fastest on large segments
Local $pivot = $array[Int(($left + $right)/2)]
Local $L = $left
Local $R = $right
Do
While ((IsNumber($array[$L]) = IsNumber($pivot) And $array[$L] < $pivot) _
Or (IsNumber($array[$L]) <> IsNumber($pivot) And String($array[$L]) < String($pivot)))
;While $array[$L] < $pivot
$L = $L + 1
Wend
While ((IsNumber($array[$R]) = IsNumber($pivot) And $array[$R] > $pivot) _
Or (IsNumber($array[$R]) <> IsNumber($pivot) And String($array[$R]) > String($pivot)))
; While $array[$R] > $pivot
$R = $R - 1
Wend
; Swap
If $L <= $R Then
$t = $array[$L]
$array[$L] = $array[$R]
$array[$R] = $t
$L = $L + 1
$R = $R - 1
EndIf
Until $L > $R
__ArrayQSort1($array, $left, $R)
__ArrayQSort1($array, $L, $right)
EndFunc
; Private
Func __ArrayQSort2(ByRef $array, ByRef $left, ByRef $right, ByRef $dim2, ByRef $sortIdx, ByRef $decend)
If $left >= $right Then Return
Local $t, $d2 = $dim2 - 1
Local $pivot = $array[Int(($left + $right)/2)][$sortIdx]
Local $L = $left
Local $R = $right
Do
If $decend Then
While ((IsNumber($array[$L][$sortIdx]) = IsNumber($pivot) And $array[$L][$sortIdx] > $pivot) _
Or (IsNumber($array[$L][$sortIdx]) <> IsNumber($pivot) And String($array[$L][$sortIdx]) > String($pivot)))
;While $array[$L][$sortIdx] > $pivot
$L = $L + 1
Wend
While ((IsNumber($array[$R][$sortIdx]) = IsNumber($pivot) And $array[$R][$sortIdx] < $pivot) _
Or (IsNumber($array[$R][$sortIdx]) <> IsNumber($pivot) And String($array[$R][$sortIdx]) < String($pivot)))
;While $array[$R][$sortIdx] < $pivot
$R = $R - 1
Wend
Else
While ((IsNumber($array[$L][$sortIdx]) = IsNumber($pivot) And $array[$L][$sortIdx] < $pivot) _
Or (IsNumber($array[$L][$sortIdx]) <> IsNumber($pivot) And String($array[$L][$sortIdx]) < String($pivot)))
;While $array[$L][$sortIdx] < $pivot
$L = $L + 1
Wend
While ((IsNumber($array[$R][$sortIdx]) = IsNumber($pivot) And $array[$R][$sortIdx] > $pivot) _
Or (IsNumber($array[$R][$sortIdx]) <> IsNumber($pivot) And String($array[$R][$sortIdx]) > String($pivot)))
;While $array[$R][$sortIdx] > $pivot
$R = $R - 1
Wend
EndIf
If $L <= $R Then
For $x = 0 To $d2
$t = $array[$L][$x]
$array[$L][$x] = $array[$R][$x]
$array[$R][$x] = $t
Next
$L = $L + 1
$R = $R - 1
EndIf
Until $L > $R
__ArrayQSort2($array, $left, $R, $dim2, $sortIdx, $decend)
__ArrayQSort2($array, $L, $right, $dim2, $sortIdx, $decend)
EndFunc
;===============================================================================
;
; Function Name: _ArraySwap()
; Description: Swaps two elements of an array.
; Author(s): David Nuttall <danuttall at rocketmail dot com>
;
;===============================================================================
Func _ArraySwap(ByRef $svector1, ByRef $svector2)
Local $sTemp = $svector1
$svector1 = $svector2
$svector2 = $sTemp
SetError(0)
EndFunc ;==>_ArraySwap
;===============================================================================
;
; Function Name: _ArrayToClip()
; Description: Sends the contents of an array to the clipboard.
; Author(s): Cephas <cephas at clergy dot net>
;
; Jos van der Zande
; Modified: Added $i_Base parameter and logic
;===============================================================================
Func _ArrayToClip(const ByRef $avArray, $i_Base = 0)
Local $iCntr, $iRetVal = 0, $sCr = "", $sText = ""
If (IsArray($avArray)) Then
For $iCntr = $i_Base To (UBound($avArray) - 1)
$iRetVal = 1
If $iCntr > $i_Base Then
$sCr = @CR
EndIf
$sText = $sText & $sCr & $avArray[$iCntr]
Next
EndIf
ClipPut($sText)
Return $iRetVal
EndFunc ;==>_ArrayToClip
;===============================================================================
;
; Function Name: _ArrayToString()
; Description: Places the elements of an array into a single string,
; separated by the specified delimiter.
; Author(s): Brian Keene <brian_keene at yahoo dot com>
;
;===============================================================================
Func _ArrayToString(Const ByRef $avArray, $sDelim, $iStart = 0, $iEnd = 0)
; Declare local variables.
Local $iCntr = 0, $iUBound = 0, $sResult = ""
; If $avArray is an array then set var for efficiency sake.
If (IsArray($avArray)) Then
$iUBound = UBound($avArray) - 1
EndIf
If $iEnd = 0 Then $iEnd = $iUBound
; Check for parameter validity.
Select
Case (Not IsArray($avArray))
SetError(1)
Return ""
Case( ($iUBound + 1) < 2 Or UBound($avArray, 0) > 1)
SetError(2)
Return ""
Case (Not IsInt($iStart))
SetError(3)
Return ""
Case (Not IsInt($iEnd))
SetError(5)
Return ""
Case (Not IsString($sDelim))
SetError(7)
Return ""
Case ($sDelim = "")
SetError(8)
Return ""
Case (StringLen($sDelim) > 1)
SetError(9)
Return ""
Case ($iStart = -1 And $iEnd = -1)
$iStart = 0
$iEnd = $iUBound
Case ($iStart < 0)
SetError(4)
Return ""
Case ($iEnd < 0)
SetError(6)
Return ""
EndSelect
; Make sure that $iEnd <= to the size of the array.
If ($iEnd > $iUBound) Then
$iEnd = $iUBound
EndIf
; Combine the elements into the string.
For $iCntr = $iStart To $iEnd
$sResult = $sResult & $avArray[$iCntr]
If ($iCntr < $iEnd) Then
$sResult = $sResult & $sDelim
EndIf
Next
SetError(0)
Return $sResult
EndFunc ;==>_ArrayToString
;===============================================================================
;
; FunctionName: _ArrayTrim()
; Description: Trims all elements in an array a certain number of characters.
; Syntax: _ArrayTrim( $aArray, $iTrimNum , [$iTrimDirection] , [$iBase] , [$iUbound] )
; Parameter(s): $aArray - The array to trim the items of
; $iTrimNum - The amount of characters to trim
; $iTrimDirection - 0 to trim left, 1 to trim right
; [Optional] : Default = 0
; $iBase - Start trimming at this element in the array
; [Optional] : Default = 0
; $iUbound - End trimming at this element in the array
; [Optional] : Default = Full Array
; Requirement(s): None
; Return Value(s): 1 - If invalid array
; 2 - Invalid base boundry parameter
; 3 - Invalid end boundry parameter
; 4 - If $iTrimDirection is not a zero or a one
; Otherwise it returns the new trimmed array
; Author(s): Adam Moore (redndahead)
; Note(s): None
;
;===============================================================================
Func _ArrayTrim($aArray, $iTrimNum, $iTrimDirection = 0, $iBase = 0, $iUBound = 0)
Local $i
;Validate array and options given
If UBound($aArray) = 0 Then
SetError(1)
Return $aArray
EndIf
If $iBase < 0 Or Not IsNumber($iBase) Then
SetError(2)
Return $aArray
EndIf
If UBound($aArray) <= $iUBound Or Not IsNumber($iUBound) Then
SetError(3)
Return $aArray
EndIf
; Set to ubound when not specified
If $iUBound < 1 Then $iUBound = UBound($aArray) - 1
If $iTrimDirection < 0 Or $iTrimDirection > 1 Then
SetError(4)
Return
EndIf
;Trim it off
For $i = $iBase To $iUBound
If $iTrimDirection = 0 Then
$aArray[$i] = StringTrimLeft($aArray[$i], $iTrimNum)
Else
$aArray[$i] = StringTrimRight($aArray[$i], $iTrimNum)
EndIf
Next
Return $aArray
EndFunc ;==>_ArrayTrim